/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package org.japo.java.swing.events;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import org.japo.java.swing.igu.IGU;

/**
 *
 * @author José A. Pacheco
 */
public class GEABola implements ActionListener {

    private final IGU igu;
    static int contador = 1;
    public GEABola(IGU igu) {
        this.igu = igu;
    }

    @Override
    public void actionPerformed(ActionEvent ae) {
        // Coordenadas de la imagen
        int xBola = igu.lblBola.getX();
        int yBola = igu.lblBola.getY();

        // Movimiento horizontal
        if (igu.dirHorBola) {
            xBola += igu.PASO_HOR_BOLA_M;
            if (xBola + igu.ANCHO_BOLA >= igu.ANCHO_PISTA) {
                igu.dirHorBola = false; // Izquierda
            }
        } else {
            xBola -= igu.PASO_HOR_BOLA_M;
            if (xBola <= 0) {
                igu.dirHorBola = true;  // Derecha
            }
        }

        // Movimiento vertical
        if (igu.dirVerBola) {   // Abajo
            // Actualiza la ccordenada vertical
            yBola += igu.PASO_HOR_BOLA_M;
            
            if (yBola + igu.ALTO_BOLA >= igu.ALTO_PISTA) {
                // Para el temporizador
                igu.timerBola.stop();

                // Vuelve invisible la bola
                igu.lblBola.setVisible(false);
                
                // Anota el marcador
                try {
                    String marcador = igu.lblMarcadorSup.getText();
                    int puntos = Integer.parseInt(marcador);
                    igu.lblMarcadorSup.setText(++puntos + "");
                } catch (NumberFormatException e) {
                    igu.lblMarcadorSup.setText("0");
                }
                
                // Coloca la bola en el medio del campo
//                xBola = (igu.ANCHO_PISTA - igu.ANCHO_BOLA) / 2;
                yBola = (igu.ALTO_PISTA - igu.ALTO_BOLA) / 2;
                igu.lblBola.setLocation(xBola, yBola);
                
                // Cambia trayectoria - arriba
                igu.dirVerBola = false;
                
                // Vuelve visible la pelota
                igu.lblBola.setVisible(true);
                
                // Activa el temporizador
                igu.timerBola.start();
            } else {
                // Mueve la bola
                igu.lblBola.setLocation(xBola, yBola);
            }
        } else {    // Arriba
            // Actualiza la ccordenada vertical
            yBola -= igu.PASO_HOR_BOLA_M;
            
            // Verifica entrada en porteria
            if (yBola <= 0) {
                // Para el temporizador
                igu.timerBola.stop();

                // Vuelve invisible la bola
                igu.lblBola.setVisible(false);
                
                // Anota el marcador
                try {
                    String marcador = igu.lblMarcadorInf.getText();
                    int puntos = Integer.parseInt(marcador);
                    igu.lblMarcadorInf.setText(++puntos + "");
                } catch (NumberFormatException e) {
                    igu.lblMarcadorInf.setText("0");
                }
                
                // Coloca la bola en el medio del campo
//                xBola = (igu.ANCHO_PISTA - igu.ANCHO_BOLA) / 2;
                yBola = (igu.ALTO_PISTA - igu.ALTO_BOLA) / 2;
                igu.lblBola.setLocation(xBola, yBola);
                
                // Cambia trayectoria - abajo
                igu.dirVerBola = true;
                
                // Vuelve visible la pelota
                igu.lblBola.setVisible(true);
                
                // Activa el temporizador
                igu.timerBola.start();
            } else {
                // Mueve la bola
                igu.lblBola.setLocation(xBola, yBola);
            }
        }

        // Coordenadas de las palas
        int xPalaSup = igu.lblPalaSup.getX();
        int yPalaSup = igu.lblPalaSup.getY();
        int xPalaInf = igu.lblPalaInf.getX();
        int yPalaInf = igu.lblPalaInf.getY();

        // Comprueba colisiones
        if (xBola  + igu.ANCHO_BOLA >= xPalaInf &&   // Paleta inferior
            xBola <= xPalaInf       + igu.ANCHO_PALA &&
            yBola  + igu.ALTO_BOLA  >= yPalaInf &&
            yBola  + igu.ALTO_BOLA  <= yPalaInf + igu.ALTO_PALA) {
            igu.dirVerBola = false;     // Rebota hacia arriba           
        } else if (xBola  + igu.ANCHO_BOLA >= xPalaSup && // Paleta superior
                   xBola <= xPalaSup + igu.ANCHO_PALA &&
                   yBola <= yPalaSup + igu.ALTO_PALA &&
                   yBola >= yPalaSup) {
            igu.dirVerBola = true;     // Rebota hacia abajo
        }
    }
}
